﻿package net.ojbk.jiaofu.service;

import java.io.File;
import java.util.Date;

import org.apache.commons.lang3.ArrayUtils;

import net.ojbk.database.DatabaseConnection;
import net.ojbk.jiaofu.dao.SyTaskDao;
import net.ojbk.jiaofu.dao.SyTaskSubmitDao;
import net.ojbk.jiaofu.po.SyTask;
import net.ojbk.jiaofu.po.SyTaskSubmit;
import net.ojbk.jiaofu.util.*;
import net.ojbk.util.StringTool;

public class TeacherService {

	
/*
 * 功能：发布一个收取信息的任务
 * 需求：
 *1.将教学任务写入SyTask数据库
 *2.为每一个需完成教学任务的学生增加一条SyTaskSubmit记录,status状态初始化为0
 *3.根据要收取的信息创建excel表格 
 */
	public static int publishExcelTask(String[] studentId,SyTask st,String[] basicInfo,String[] extraInfo,String taskId) {   //yes
		//1.将教学任务写入SyTask数据库
		st.setTaskId(taskId);
		String basicinfo=StringTool.toOneString(basicInfo);
		String extrainfo=StringTool.toOneString(extraInfo);
		st.setBasicInfo(basicinfo);
		st.setExtraInfo(extrainfo);
		Date day=new Date(); 
		st.setBeginTime(day);
		DatabaseConnection dbcon = new DatabaseConnection();
		SyTaskDao std=new SyTaskDao(dbcon);
		boolean flag=std.addOneRecord(st);
		System.out.println(flag);
		//2.为每一个需完成教学任务的学生增加一条SyTaskSubmit记录,status状态初始化为0
		SyTaskSubmit sts=new SyTaskSubmit();
		SyTaskSubmitDao ssd=new SyTaskSubmitDao(dbcon);
		sts.setTaskId(taskId);
		sts.setStatus(0);
		for(int i=0;i<studentId.length;i++)
		{
			sts.setUserId(studentId[i]);
			flag=ssd.addOneRecord(sts);
		}
		//3.根据要收取的信息创建excel表格

	
		//创建excel表格2
		String[] info = (String[]) ArrayUtils.addAll(basicInfo, extraInfo);
		System.out.println(info.length);
		String path=TaskService.getExcelPath(st.getUserId(), taskId);
		System.out.println(path);
		//String path="F:\\test1\\StatisticalInfo.xls";
		File excelPathFile = new File(path);
		if (!excelPathFile.getParentFile().exists())
			excelPathFile.getParentFile().mkdirs();

		//System.out.println(excelPathFile.exists());

		try {
			ExcelTool.createExcelOfStudents("学生信息", info, path);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		if(flag)
			return 1;
		else
			return 0;
	}

	
	
/*
 * 功能：发布一个收取文件的任务
 *1.将教学任务写入SyTask数据库
 *2.为每一个需完成教学任务的学生增加一条SyTaskSubmit记录,status状态初始化为0
 */
	public static int publishFileTask(String[] studentId,SyTask st,String taskId) {   //no
		//1.将教学任务写入SyTask数据库
		st.setTaskId(taskId);
		Date day=new Date(); 
		java.sql.Timestamp date=new java.sql.Timestamp(day.getTime());
		st.setBeginTime(date);
		DatabaseConnection dbcon = new DatabaseConnection();
		SyTaskDao std=new SyTaskDao(dbcon);
		boolean flag=std.addOneRecord(st);
		//2.为每一个需完成教学任务的学生增加一条SyTaskSubmit记录,status状态初始化为0
		SyTaskSubmit sts=new SyTaskSubmit();
		SyTaskSubmitDao ssd=new SyTaskSubmitDao(dbcon);
		sts.setTaskId(taskId);
		sts.setStatus(0);
		for(int i=0;i<studentId.length;i++)
		{
			sts.setUserId(studentId[i]);
			flag=ssd.addOneRecord(sts);
		}
		//获取上传文件夹路径
		String path=TaskService.getTreasuryPath(st.getUserId(), taskId);
		File PathFile = new File(path);
		//若文件夹不存在，则创建
		if (!PathFile.getParentFile().exists())
			PathFile.getParentFile().mkdirs();
		
		if(flag)
			return 1;
		else
			return 0;
	}

	
	
/*
 * 功能：撤销一个任务
 * 需求：
 * 1.删除SyTask该任务的记录
 * 2.删除SyTaskSubmit中与该任务有关的提交记录
 */
     public static int deleteOneTask(String taskId) {   //yes
    	SyTask st=new SyTask();
 		DatabaseConnection dbcon = new DatabaseConnection();
 		SyTaskDao std=new SyTaskDao(dbcon);
		SyTaskSubmitDao stsd=new SyTaskSubmitDao(dbcon);
		st.setTaskId(taskId);
		boolean flag=std.deleteOneRecord(st);
		SyTaskSubmit[] sts=stsd.queryAllRecodByTaskId(taskId);
		for(int i=0;i<sts.length;i++) {
			stsd.deleteOneRecord(sts[i]);
		}
    	if(flag)
    		return 1;
    	else
    		return 0;
     }
     
     
/*
 * 功能：修改任务结束时间
 * 需求：
 * 1.任务结束时间须在开始时间之后
 * 2.结束时间须在当前时间之后
 */
     public static int modifyEndtime(String taskId,Date newEndTime) {    //yes
 		DatabaseConnection dbcon=new DatabaseConnection();
 		SyTaskDao std=new SyTaskDao(dbcon);
 		SyTask st=new SyTask();
 		st.setTaskId(taskId);
 		if(!std.queryOneRecord(st)) {
 			return 2;   //未查询到对应的任务
 		}
 		Date day=new Date();    //获取当前时间
 		Date beginTime=st.getBeginTime();
 		if(newEndTime.before(beginTime)) {
 			return 3;   //新结束时间比开始时间早
 		}
 		if(newEndTime.before(day)) {
 			return 4;    //新结束时间比当前时间早
 		}
 		st.setEndTime(newEndTime);
 		std.updateOneRecord(st);
 		dbcon.close();
 		return 1;    //修改成功
}
     
     
/*
 * 功能：立即结束任务
 * 需求：
 * 1.设置任务结束时间为当前时间
 */
   public static int endTask(String taskId) {  //yes
		DatabaseConnection dbcon=new DatabaseConnection();
		SyTaskDao std=new SyTaskDao(dbcon);
		SyTask st=new SyTask();
		st.setTaskId(taskId);
		if(!std.queryOneRecord(st)) {
			return 2;   //未查询到对应的任务Id
		}
		Date day=new Date(); 
		java.sql.Timestamp date=new java.sql.Timestamp(day.getTime());
		st.setEndTime(date);  //写入结束时间
		if(!std.updateOneRecord(st)) {
			return 3;  //修改时间失败
		}
		return 1;
   }
   
   public static void main(String[] args) {
	   TeacherService ts=new TeacherService();
	   int flag;
	   //flag=ts.endTask("0000");
	   //Date day=new Date(); 
	   //java.sql.Timestamp date=new java.sql.Timestamp(day.getTime());
	   //flag=ts.modifyEndtime("0000",date );

	   String studentId[] = new String [2];
	   SyTask st=new SyTask();
	   String basicInfo[] = new String [2];
	   String extarInfo[] = new String [2];
	   String taskId="000120";
	   studentId[0]="00012";
	   studentId[1]="00022";
	   extarInfo[0]="girlfrieng";
	   extarInfo[1]="qq";
	   basicInfo[0]="age";
	   basicInfo[1]="tel";
	   st.setContent("1234");
	   st.setTitle("xxxxxx");
	   Date day1=new Date();
	   java.sql.Timestamp date1=new java.sql.Timestamp(day1.getTime());
	   st.setEndTime(date1);
	   st.setUserId("88888");
	   flag=ts.publishExcelTask(studentId, st, basicInfo, extarInfo, taskId);

	   System.out.println(flag);
   }
}

















